Storage networking is the practice of connecting storage devices to computing devices (e.g., clients, servers, and the like) by using networks (e.g., Fibre Channel, Internet Small Computer System Interface (iSCSI), and others) instead of traditional point-to-point small computer system interface (SCSI) channels. A network used to connect servers to storage devices is referred to as a storage area network (SAN). Typically, within a SAN environment, computing devices have access to the available storage devices. This presents a wide variety of benefits, including server platform fail-over wherein a failed storage device and failed server are automatically recovered by another operational server platform and operational storage device without requiring any recabling of the operational storage devices.
Prior to the development of SAN technology, local and wide area networks provided access between computing devices that did not always include storage devices. Connections were established with network protocols such as Transmission Communication Protocol (TCP), Unreliable Datagram Protocol (UDP), and others. These protocols ensure that message ordering is preserved and that messages are not lost. Distributed File Systems (DFS) such as network file system (NFS) and Common Internet file system (CIFS) are layered on top of network protocols. Distributed File Systems provide uniformed named access to files and their data storage devices across a network consisting of heterogeneous computing devices. Using DFS, access to files or data storage devices is transparent to any particular computing device. Thus, access is consistent across the DFS without the need for physical locations or other details associated with any particular file or data. This access transparency is often referred to as storage virtualization.
Storage arrays provide access to storage disks within a shared storage environment. The storage arrays include the storage disks, software to access those storage disks, controllers, memory, power supplies, and the like. Host applications within the shared storage environment communicate with the storage arrays to gain access to storage locations on the storage disks controlled by the storage arrays. However, this access is typically in the form of vendor-specific interfaces provided by the vendors of the storage arrays. Some vendors provide software libraries to gain access to the storage arrays (e.g., by implementing APIs). In other cases, vendors provide command line interfaces, where the commands are encoded in a specific data format, such as Extensible Markup Language (XML) data format and others.
Often storage management applications are interposed between the host applications and the underlying physical storage arrays. This is done, to alleviate the host applications from the responsibilities of maintaining storage as well as to centralize storage management. Thus, each storage management application is responsible for managing storage for a plurality of host applications and a plurality of storage arrays. However, in a heterogeneous shared storage environment with disparate storage arrays, the storage management applications are forced to know and manage a variety of interfaces in order to properly maintain and manage storage for the host applications.
As a result, the storage management applications can quickly become both overly complex and a maintenance problem. Accordingly, as vendors' storage arrays become more sophisticated as to the types of services provided to the host applications, the vendors' storage array interfaces have become increasingly more complex. At some point, reliability and maintainability of the storage cannot be adequately addressed on each operating system by a single storage management application. However, as one of ordinary skill in the art readily appreciates, managing the storage without a single consistent interface presents significant software development, maintenance, and support challenges.
Moreover, storage management applications often manage storage as virtual storage resources that are then made available to the host applications. In this way, the host applications do not become too complex and untoward when attempting to manage storage using low level interfaces provided by the underlying physical storage arrays. The storage management applications provide a higher level of abstraction for the underlying physical storage arrays to the host applications.
However, because of the disparate interfaces associated with heterogeneous physical storage arrays, the storage management applications are themselves becoming too complex. Correspondingly, the storage management applications can benefit from an interface at a higher level of abstraction for dealing with the underlying physical storage arrays, with such an interface, the storage management applications can be more maintainable, better performing, and more robust in heterogeneous shared storage environments.
Yet, to provide a higher level of abstraction and still permit effective storage management by storage management applications, the storage management applications need to have interfaces that can acquire configuration settings associated with the physical storage arrays of the underlying storage. Without the ability to acquire these configuration settings, any integration layer interface interposed between the storage applications and the physical storage arrays will result in the integration layer taking over the storage management responsibilities for the storage management applications. And as a result, the integration layer will itself become complex and untoward.
Therefore, there is a need for techniques that provide improved storage resource integration layer interfaces within a shared storage environment. The integration layer interface should be easily managed and integrated with storage management applications, such that the storage management applications can flexibly manage storage on behalf of host applications. Furthermore, there is a need to provide the storage management applications with flexible access to configuration settings associated with the underlying storage arrays.